package com.itzz.spring_zhoneHeng.base;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.security.core.userdetails.UserDetails;

import java.util.Date;

public class JwtTokenUtils {
    public static final String TOKEN_HEADER = "Authorization";  //请求头部
    public static final String TOKEN_PREFIX = "Bearer ";  //token 头部
    //    public static final String TOKEN_TYPE = "JWT";
    //这个常量用于在处理安全令牌时添加额外的混淆安全性。
    public static final String TOKEN_SALT = "test_key"; //token盐值 (密匙)
    public static final long TOKEN_EXPIRATION = 60 * 60L;  //token过期时间
    //创建token方法
    public static String createToken(UserDetails userDetails) {
        JwtBuilder name = Jwts.builder()
                .claim("name", userDetails.getUsername())  //设置用户名
                .setIssuedAt(new Date())  //设置开始时间
                .setExpiration(new Date(System.currentTimeMillis() + 1000 * TOKEN_EXPIRATION)) //设置过期时间
                .signWith(SignatureAlgorithm.HS256, TOKEN_SALT); //签名算法和密钥
        return name.compact();
    }
    //解析token方法
    public static Claims getBody(String token) {
        Claims body = Jwts.parser()
                .setSigningKey(TOKEN_SALT)
                .parseClaimsJws(token)
                .getBody();
        return body;
    }
    //验证token是否过期
    public static Boolean isExpiration(String token) {

                //判断token 过期时间是否在当前时间之后
        return getBody(token).getExpiration().after(new Date());
    }
    //获取token中用户的姓名  信息
    public static String getTokenName(String token) {
        return (String) getBody(token).get("name");
    }
}
